#ifndef PARSERENTRADAESTANDAR_H_
#define PARSERENTRADAESTANDAR_H_

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <list>
#include <istream>

using std::istream;
using std::cin;
using std::string;
using std::stringstream;
using std::ofstream;
using std::ios;
using std::cout;
using std::endl;
using std::list;

class ParserEntradaEstandar {
private:
	istream* archivoSTDIN;
	ofstream archSalida;
	int cantBytesLeidos;
	int content_length;
	int longMarcaDeFinDePost;
	bool archivoActualValido;
	bool finDePost, esFinDeUnoDeLosArchivos;
	bool leerBinario;
	string nombreArchivoComprimido, nombreCarpetaDescomprimida;
	string nombreArchivoPrincipal;
	char* rutaDirectorioArchTemporales;
public:
	ParserEntradaEstandar(int content_length, char* ruta);

	int getContent_length() {return content_length;}
	int getCantBytesLeidos() {return cantBytesLeidos;}
	bool boundaryCoincide(string* lineaStr);
	bool marcaDeFinDeArchivo_Post(string* linea);
	void escribirLineaAArchivo(string* lineaStr);
	void leerYEscribirLinea(char* linea);
	void analizarLinea(char* cadena);
	void levantarDatosDeCabecera();
	int descomprimir();
	bool quedanBytesPorLeer();
	void crearNuevoArchivoComprimido();
	string buscarCadena(char* cadena, char* cadenaAHallar);
	void eliminarComillasYSaltoDeLinea();
	string getNombreArchivoPpal() {return nombreArchivoPrincipal;}
	bool setArchivoPrincipal();
	string getNombreArchivoComprimido() {return nombreArchivoComprimido;}
	string getNombreCarpetaDescomprimida() {return nombreCarpetaDescomprimida;}
	
	~ParserEntradaEstandar() {}
};
#endif /* PARSERENTRADAESTANDAR_H_ */
